package Demo93;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 飞地的数量
 * https://leetcode.cn/problems/number-of-enclaves/description/
 */

class Solution {
    int m,n;
    int[] dx = {0,0,1,-1};
    int[] dy = {1,-1,0,0};
    public int numEnclaves(int[][] grid) {
        m = grid.length; n = grid[0].length;
        boolean[][] vis = new boolean[m][n];
        Queue<int[]> q = new LinkedList<>();


        // for(int i = 0; i < m; i++) {
        //     if(grid[i][0] == 1) q.add(new int[] {i,0});
        //     if(grid[i][n -1] == 1) q.add(new int[] {i,n-1});
        // }
        // for(int i = 0; i < n; i++) {
        //     if(grid[0][i] == 1) q.add(new int[] {0,i});
        //     if(grid[m-1][i] == 1) q.add(new int[] {m-1,i});
        // }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(i == 0 || i == m - 1 || j == 0 || j == n - 1) {
                    if(grid[i][j] == 1) {
                        q.add(new int[] {i,j});
                        vis[i][j] = true;
                    }
                }
            }
        }

        while(!q.isEmpty()) {
            int[] t = q.poll();
            int a = t[0], b = t[1];
            for(int i = 0; i < 4; i++) {
                int x = a + dx[i], y = b + dy[i];
                if(x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1 && !vis[x][y]) {
                    q.add(new int[] {x,y});
                    vis[x][y] = true;
                }
            }
        }
        int ret = 0;
        for(int i = 1; i < m - 1;i++) {
            for(int j = 1; j < n - 1;j++) {
                if(grid[i][j] == 1 && !vis[i][j]) {
                    ret++;
                }
            }
        }
        return ret;
    }
}
class Demo {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int ret = solution.numEnclaves(new int[][]{{0, 0,0, 0}, {1, 0, 1, 0}, {0, 1, 1, 0}, {0, 0, 0, 0}});
        System.out.println(ret);
    }
}